# D:\Py\python\Script\voice_input_processor.py
import whisper
import wavio
import os
import pyperclip
import sys
import time

# 配置参数
MODEL_NAME = "small" # 您可以根据需要改为 "medium" 或 "large"
TEMP_AUDIO_FILE = "D:\\Py\\python\\Script\\temp_recording.wav" # 临时音频文件路径
STOP_SIGNAL_FILE = "D:\\Py\\python\\Script\\stop_recording.flag" # 停止信号文件路径

def transcribe_and_copy():
    """使用 Whisper 识别音频并复制到剪贴板"""
    
    # 确保录音脚本有足够时间保存文件
    time.sleep(0.5) # 稍微等待一下，确保录音文件完全写入

    if not os.path.exists(TEMP_AUDIO_FILE):
        print(f"错误: 音频文件 '{TEMP_AUDIO_FILE}' 不存在，无法识别。", file=sys.stderr)
        pyperclip.copy("") # 清空剪贴板，避免粘贴旧内容
        return

    try:
        print(f"加载 Whisper 模型: {MODEL_NAME}...")
        model = whisper.load_model(MODEL_NAME) # 这里会检查并下载模型
        
        print(f"开始识别音频: {TEMP_AUDIO_FILE}...")
        
        # 引导模型输出简体中文
        result = model.transcribe(
            TEMP_AUDIO_FILE, 
            language="zh", 
            initial_prompt="这是一段普通话，请输出简体中文。", 
            fp16=False # 避免CPU警告
        )
        
        transcribed_text = result["text"].strip() # 移除首尾空格
        
        print(f"识别结果: {transcribed_text}")
        
        if transcribed_text:
            pyperclip.copy(transcribed_text)
            print("识别结果已复制到剪贴板。")
        else:
            print("未识别到有效文本。")

    except Exception as e:
        print(f"发生识别或模型加载错误: {e}", file=sys.stderr)
        pyperclip.copy("") # 清空剪贴板
    finally:
        # 清理临时音频文件
        if os.path.exists(TEMP_AUDIO_FILE):
            os.remove(TEMP_AUDIO_FILE)
        print("处理脚本退出。")

if __name__ == "__main__":
    transcribe_and_copy()